home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
LOGIC Apps
/
Logic-APPLE_II_APPS.iso
/
mac
/
LOGIC Apple II 5.25" Library - ProDOS
/
PRO081.dsk
/
MISCELLANEOUS
/
MISC.10.GETCHAR.txt
< prev
next >
Wrap
Text File
|
2012-02-16
|
6KB
|
108 lines
Apple II
Technical Notes
_____________________________________________________________________________
Developer Technical Support
Apple II Miscellaneous
#10: 80-Column GetChar Routine
Revised by: Pete McDonald November 1988
Written by: Cameron Birse December 1986
This Technical Note presents an 80-column GetChar routine.
_____________________________________________________________________________
The following is an example of how to display a string on the 80-column
screen, reposition the cursor at the beginning of the string, and use the
right arrow to get characters which are already there or accept new characters
in their place. The routine is a simple BASIC program which displays the
string and repositions the cursor before getting incoming characters. If the
character input is a right arrow, the program calls the assembly language
routine to get the character from screen memory at the current cursor
location.
10 PRINT CHR$ (4);"bload getchar.0": REM first install assembly routine
20 B$ = "hello"
30 PRINT CHR$ (4);"pr#3"
40 PRINT B$;:B$ = ""
50 A = PEEK (1403): REM get horiz location
60 A = A - 5: REM move cursor to beginning of string
70 POKE 1403,A
80 GET A$: REM get a character
90 IF A$ = CHR$ (21) THEN GOSUB 130: REM if char is forward arrow,
handle with assembly routine (GETCHAR)
100 IF A$ = CHR$ (27) THEN 170: REM if esc key then we're done
110 PRINT A$;:B$ = B$ + A$
120 GOTO 80
130 CALL 768: REM GETCHAR
140 A = PEEK (6)
150 A$ = CHR$ (A)
160 RETURN
170 PRINT : PRINT : PRINT B$: REM and we're done
An assembled listing of the assembly language GetChar routine follows on the
next page.
SOURCE FILE #01 =>GETCHAR
----- NEXT OBJECT FILE NAME IS GETCHAR.0
0300: 0300 1 ORG $300
0300: C01F 2 RD80VID EQU $C01F ;80 COLUMN STATE
0300: C054 3 TXTPAGE1 EQU $C054 ;TURN OFF PAGE 2 (READ)
0300: C055 4 TXTPAGE2 EQU $C055 ;TURN ON PAGE 2 (READ)
0300: C000 5 CLR80COL EQU $C000 ;TURN OFF 80 STORE (WRITE)
0300: C001 6 SET80COL EQU $C001 ;TURN ON 80 STORE (WRITE)
0300: 0028 7 BASL EQU $28 ;BASE ADDRESS OF SCREEN LOCATION
0300: 0029 8 BASH EQU $29
0300: 057B 9 OURCH EQU $57B ;80 COLUMNS HORIZ. POSITION
0300: 05FB 10 OURCV equ $5fb ;80 col vertical pos
0300: 0006 11 char equ 6 ;place to hand character back to basic
0300: 12 *
0300: 13 *************************************************************
0300: 14 * GETCHAR - This routine gets an ascii character from the *
0300: 15 * 80 column display memory of the Apple IIe. It assumes *
0300: 16 * that main memory is switched in and that the base addrs *
0300: 17 * of the line has already been calculated and resides *
0300: 18 * in BASL and BASH. It is meant to be called from BASIC *
0300: 19 * as follows: *
0300: 20 * CALL 768 *
0300: 21 * A = PEEK (6) *
0300: 22 * A$ = CHR$(A) *
0300: 23 * As you can see, the character is returned in location *
0300: 24 * $6 in zero page. This routine is offered as an example. *
0300: 25 * No guaranties are made regarding its fitness for any *
0300: 26 * purpose. By Cameron Birse 6/10/86 *
0300: 27 *************************************************************
0300: 28 *
0300: 0300 29 getchr equ * ;get the char at the current cursor loc.
0300:A9 01 30 lda #$01 ;mask for horiz test
0302:2C 7B 05 31 bit OURCH ;are we in main or aux mem?
0305:D0 17 031E 32 bne main ;if bit 0 of OURCH is set, then main mem
0307: 0307 33 aux equ *
0307:AD 7B 05 34 lda OURCH ;get horiz pos.
030A:18 35 clc ;clear the carry for divide
030B:6A 36 ror a ;divide by two
030C:A8 37 tay ;put the result in y
030D:8D 01 C0 38 sta SET80COL ;turn on 80 store
0310:AD 55 C0 39 lda TXTPAGE2 ;flip to aux text page
0313:B1 28 40 lda (basl),y ;get the character
0315:85 06 41 sta char
0317:AE 54 C0 42 ldx TXTPAGE1 ;turn off aux text page
031A:8D 00 C0 43 sta CLR80COL ;turn off 80 store
031D:60 44 rts
031E: 031E 45 main equ *
031E:AD 7B 05 46 lda OURCH ;get horiz pos.
0321:18 47 clc ;clear the carry for divide
0322:6A 48 ror a ;divide by two
0323:A8 49 tay ;put the result in y
0324:B1 28 50 lda (basl),y ;get the character
0326:85 06 51 sta char
0328:60 52 rts
Further Reference
o Apple IIGS Firmware Reference
o Apple IIe Technical Reference Manual
o Apple IIc Technical Reference Manual